Exclusive encryption

ABSTRACT

An exclusive encryption system is established using multiple computing devices. The exclusive encryption system allows for the exclusion of certain plaintext (e.g., by one of the computing devices) and ciphertext (e.g., by another of the computing devices) while at the same time maintaining the privacy created by the encryption (e.g., so the other computing device cannot see the plaintext). The exclusive encryption system may be implemented as part of a serverless distributed file system with directory entries (e.g., file names or folder names) being the plaintext, or alternatively as part of other systems.

RELATED APPLICATIONS

This application is a continuation application of U.S. patentapplication Ser. No. 09/764,962, filed Jan. 17, 2001, entitled“Exclusive Encryption” to John R. Douceur, Atul Adya, Josh D. Benaloh,and Gideon A. Yuval, which is hereby incorporated by reference herein.

TECHNICAL FIELD

This invention relates to cryptography, and more particularly tocryptosystems that enable enforcement of syntactical and/or semanticrequirements on encrypted data.

BACKGROUND OF THE INVENTION

As computer technology has advanced, so too has the need for computersecurity. One significant area of concern with computer security is thesecurity of data stored by a user of the computer. Such security caninclude, for example, security against another user reading the data,another user modifying the data (either maliciously or unintentionally),etc. One manner in which such security is currently provided is throughencryption. Using encryption, only those users who are supposed to haveaccess to the data (e.g., those users with the decryption key) are ableto decrypt and read (and/or modify) the data.

However, situations arise in which encryption creates additionalproblems. One such situation is in the case where the data is to beverified as being in accordance with a certain set of rules (e.g., anaming syntax), while at the same time maintaining the security/privacyof the data. Current systems typically cannot perform such verificationswithout reading the underlying data.

For example, in some situations where computers are networked togetherit would be desirable to have a distributed file system in whichdifferent files could be stored on different machines in the network.However, in order to maintain security of the data in the files, itwould be beneficial to be able to render both the data and the filenameitself unreadable at the computer on which the file is stored, therebypreventing another unauthorized user from gathering information aboutthe data by either reading the data file or the filename. However,maintaining a directory of such encrypted/protected filenames can leadto difficulties, especially due to the fact that the user of thecomputer on which the data file or filename is stored may not beauthorized to read the file. Care must be taken to ensure that thefilename syntax is not violated and that duplicate filenames do notexist. Current systems do not have the ability to maintain such adirectory of non-duplicate filenames that do not violate the namingsyntax while at the same time can be verified by a component that is notauthorized to read the filenames.

The invention described below addresses these disadvantages, providingmethods and systems for encryption that excludes syntactically illegalplaintext from being encrypted and that enables a party without accessto encryption keys to exclude more than one item of ciphertext thatdecrypts to the same plaintext. For this reason, the invention isreferred to as “exclusive encryption.”

SUMMARY OF THE INVENTION

Methods and systems for exclusive encryption are described herein.

According to one aspect, an exclusive encryption system is establishedusing multiple computing devices. The exclusive encryption system allowsfor the exclusion of certain plaintext (e.g., by one of the computingdevices) and ciphertext (e.g., by another of the computing devices)while at the same time maintaining the privacy created by the encryption(e.g., so the other computing device cannot see the plaintext).

According to another aspect, an exclusive encryption system isestablished as part of a serverless distributed file system. The filesystem is distributed among multiple computing devices, and eachdirectory entry (e.g., a file name or folder name) is encrypted by thedevice creating (or otherwise using) the entry. The encryption processused ensures that the directory entry is syntactically legal and cannotbe read by the device on which the entry is stored. Additionally, thedevice on which the entry is stored is able to verify the legality ofthe directory entry, and ensures that duplicate entries are not storedin the same directory.

BRIEF DESCRIPTION OF THE DRAWINGS

The present invention is illustrated by way of example and notlimitation in the figures of the accompanying drawings. The same numbersare used throughout the figures to reference like components and/orfeatures.

FIG. 1 is a block diagram illustrating an exemplary system in whichcertain embodiments of the invention can be implemented.

FIG. 2 illustrates an exemplary network environment in which certainembodiments of the invention may be practiced.

FIG. 3 illustrates an exemplary computing device such as may be used inaccordance with certain embodiments of the invention.

FIG. 4 is a flowchart illustrating an exemplary process for exclusivelyencrypting a directory entry prior to storage in accordance with certainembodiments of the invention.

FIG. 5 is a flowchart illustrating an exemplary process for decrypting areceived directory entry in accordance with certain embodiments of theinvention.

FIG. 6 is a flowchart illustrating an exemplary process for mapping aplaintext name to a mapped name in accordance with certain embodimentsof the invention.

FIG. 7 is a flowchart illustrating an exemplary process for decasifyinga mapped name in accordance with certain embodiments of the invention.

FIG. 8 is a flowchart illustrating an exemplary process for encoding adecasified name in accordance with certain embodiments of the invention.

FIG. 9 is a flowchart illustrating an exemplary process for verifying areceived directory entry in accordance with certain embodiments of theinvention.

FIG. 10 is a flowchart illustrating an exemplary process for decoding anencoded name in accordance with certain embodiments of the invention.

FIG. 11 is a flowchart illustrating an exemplary recasifying procedurein accordance with certain embodiments of the invention.

FIG. 12 is a flowchart illustrating an exemplary process for demapping aname in accordance with certain embodiments of the invention

FIG. 13 shows a general example of a computer that can be used inaccordance with the invention

DETAILED DESCRIPTION

Cryptographic methods and systems including exclusive encryption aredescribed herein. Exclusive encryption is used herein to refer toencryption that allows for the exclusion of certain plaintext andciphertext while at the same time maintaining the privacy created by theencryption. In certain embodiments, these exclusions include theexclusion of syntactically illegal plaintext (e.g., exclusion from beingencrypted) and the exclusion of multiple ciphertexts that decrypt to thesame plaintext.

The discussions herein assume a basic understanding of cryptography bythe reader. For a basic introduction of cryptography, the reader isdirected to a text written by Bruce Schneier and entitled “AppliedCryptography: Protocols, Algorithms, and Source Code in C,” published byJohn Wiley & Sons with copyright 1994 (or second edition with copyright1996).

FIG. 1 is a block diagram illustrating an exemplary system in whichcertain embodiments of the invention can be implemented. A computingdevice 102 is illustrated coupled to a computing device 104. Computingdevice 102 communicates ciphertext 106 to computing device 104.Ciphertext 106 can be communicated to computing device 104 for any of awide variety of uses, such as storage of the ciphertext, verification ofthe ciphertext, forwarding of the ciphertext, etc. Ciphertext 106 isencrypted using an exclusive encryption cryptosystem that allowscomputing device 104 to exclude certain types of data (e.g., duplicates)from being processed (e.g., stored, forwarded, etc.) by device 104without actually determining the underlying plaintext.

Another computing device 108 coupled to computing device 104 may also beable to access, and obtain the ciphertext 106 from, computing device104. If computing device 108 is not authorized to access the plaintextcorresponding to ciphertext 106, then computing device 108 would not beable to decrypt ciphertext 106 (e.g., device 108 would not have theappropriate cryptographic key(s)) and the corresponding plaintext wouldthus be secure from being viewed by device 108. However, if computingdevice 108 is authorized to access the plaintext corresponding tociphertext 106 (e.g., computing device has the appropriate key(s) todecrypt ciphertext 106), then device 108 will be able to obtain theplaintext by decrypting ciphertext 106. Additionally, computing device108 is assured that the decrypted plaintext will be syntactically legal,regardless of what encrypted bits it receives and regardless of whatkey(s) it uses.

The methods and systems of the exclusive encryption cryptosystem arediscussed herein primarily with reference to a directory service thatuses exclusive encryption. However, the invention is not limited to usewith directory services and can be used in any of a wide variety ofother situations. One example of such a situation is a secure courierservice in which a courier guarantees to the message recipient that itwill only deliver syntactically valid messages, and it will neverdeliver a duplicate message, even though the courier is not permittedaccess to the unencrypted contents of the messages it carries. Anotherexample is a secret-ballot election, in which one wishes to transmit avote in encrypted form while demonstrating that the vote is of a validform. Yet another example is “secret sharing”, in which portions of akey are distributed; in such situations, one may want to encrypt the“shares” of the key for transmission while demonstrating that the sharesare valid.

FIG. 2 illustrates an exemplary network environment 118 in which certainembodiments of the invention may be practiced. Four client computingdevices 120, 122, 124, and 126 are illustrated coupled together via adata communications network 128. Although four computing devices 120-126are illustrated, different numbers (either greater or fewer than four)may be included in network environment 118.

Network 128 represents any of a wide variety of data communicationsnetworks. Network 128 can include public portions (e.g., the Internet)as well as private portions (e.g., an internal corporate Local AreaNetwork (LAN)), as well as combinations of public and private portions.Network 128 can be implemented using any one or more of a wide varietyof conventional communications media including both wired and wirelessmedia. Any of a wide variety of communications protocols can be used tocommunicate data via network 128, including both public and proprietaryprotocols. Examples of such protocols include TCP/IP, IPX/SPX, NetBEUI,etc.

Computing devices 120-126 represent any of a wide range of computingdevices, and each device 120-126 may be the same or different. By way ofexample, devices 120-126 may be desktop computers, laptop computers,handheld or pocket computers, personal digital assistants (PDAs),cellular phones, Internet appliances, consumer electronics devices,gaming consoles, etc.

Two or more of devices 120-126 operate to implement a serverlessdistributed file system 130. The actual devices included in theserverless distributed file system 130 can change over time, allowingnew devices to be added to the system 130 and other devices to beremoved from the system 130. Each device 120-126 that is part of thedistributed file system 130 has different portions of its mass storagedevice(s) (e.g., hard disk drive) allocated for use as either localstorage or distributed storage. The local storage is used for data thatthe user desires to store on his or her local machine and not in thedistributed file system structure. The distributed storage portion isused for data that the user of the device (or another device) desires tostore within the distributed file system structure. In the illustratedexample of FIG. 2, each of devices 120-124 includes one or more massstorage devices that each includes a distributed portion and a localportion. This separation into multiple portions may occur on a perstorage device basis (e.g., one hard drive is designated for use in thedistributed system 130 while another is designated solely for localuse), and/or within a single storage device (e.g., part of one harddrive may be designated for use in the distributed system 130 whileanother part is designated for local use). Another computing device,device 126, is coupled to network 128 but is not part of the distributedfile system 130 and thus does not have any of its mass storage device(s)allocated for use by the distributed system. Device 126, which does nothave storage space allocated for use as distributed storage, may bepermitted to store files in the distributed portions of one or more ofdevices 120-124, or alternatively may be prohibited from doing so.

The distributed file system 130 operates to store one or more copies offiles on different computing devices 120-124. When a new file is createdby the user of a computer 120-126, he or she has the option of storingthe file on the local portion of his or her computing device, oralternatively in the distributed file system 130. If the file is storedin the distributed file system 130, then the file will be stored in thedistributed system portion of the mass storage device(s) of one or moreof devices 120-124. The user creating the file typically has no abilityto control which device 120-124 the file is stored on, nor any knowledgeof which device 120-124 the file is stored on. Additionally, duplicatecopies of the file will typically be saved, allowing the user tosubsequently retrieve the file even if one of the computing devices120-124 on which the file is saved is unavailable (e.g., ispowered-down, is malfunctioning, etc.).

The distributed file system 130 is implemented by one or more componentson each of the devices 120-124, thereby obviating the need for anycentralized server to coordinate the file system. These componentsoperate to determine where particular files are stored, how many copiesof the files are created for storage on different devices, etc. Exactlywhich device will store which files depends on numerous factors,including the number of devices in the distributed file system 130, thestorage space allocated to the file system from each of the devices, anumber of copies of the file are to be saved, the number of filesalready stored on the devices, etc. Thus, the distributed file system130 allows the user to create and access files (as well as folders ordirectories) without any knowledge of exactly which other computingdevice(s) the file is being stored on.

The files stored by the file system 130 are distributed among thevarious devices 120-124 and stored in encrypted form. When a new file iscreated, the device on which the file is being created encrypts the fileprior to communicating the file to other device(s) for storage. Thedirectory entry (e.g., the file name) for a new file is alsocommunicated to the other device(s) for storage. Additionally, if a newfolder or directory is created, the directory entry (e.g., folder nameor directory name) is also communicated to the other device(s) forstorage. As used herein, a directory entry refers to any entry that canbe added to a file system directory, including both file names anddirectory (or folder) names.

The distributed file system 130 is designed to prevent unauthorizedusers from reading data stored on one of the devices 120-124. Thus, afile created by device 122 and stored on device 124 is not readable bythe user of device 124 (unless he or she is authorized to do so). Inorder to implement such security, the contents of files as well as alldirectory entries are encrypted, and only authorized users are given thedecryption key. Thus, although device 124 may store a file created bydevice 122, if a user of device 124 is not an authorized user of thefile then the user of device 124 cannot decrypt (and thus cannot read)either the contents of the file or its directory name (e.g., filename).

The exclusive encryption described herein allows the directory entry tobe stored in an encrypted form, thereby preventing unauthorized usersfrom improperly gaining any information based on the filename.Additionally, the exclusive encryption assures that various propertiesare maintained. In the illustrated example, the following threeproperties are maintained:

-   -   no two encrypted entries in a directory will decrypt to the same        name    -   all encrypted entries in the directory decrypt to syntactically        legal names    -   the service that maintains the directory does not have access to        the plaintext names of the entries        Thus, the system is able to ensure both that no two entries in a        directory are encryptions of the same name and that all entries        in a directory are encryptions of syntactically legal names,        while at the same time ensuring that the device maintaining the        directory does not have access to the plaintext names of the        entries.

FIG. 3 illustrates an exemplary computing device 150 such as may be usedin accordance with certain embodiments of the invention. Computingdevice 150 can be, for example, a device 120-124 of FIG. 2. Computingdevice 150 includes a server component 152, a client component 154, amemory 156, and a mass storage device 158. Computing device 150 alsotypically includes additional components (e.g., a processor), howeverthese additional components have not been shown in FIG. 3 so as not toclutter the drawings. Memory 156 can be any of a wide variety ofconventional volatile and/or nonvolatile memories, such as RAM, ROM,Flash memory, etc. Mass storage device 158 can be any of a wide varietyof conventional nonvolatile storage devices, such as a magnetic disk,optical disk, Flash memory, etc.

Computing device 150 is intended to be used in a serverless distributedfile system, and as such includes both server component 152 and clientcomponent 154. Server component 152 handles requests when device 150 isresponding to a request involving a file or directory entry stored (orto be stored) in storage device 158 (although files and correspondingdirectory entries need not be stored on the same device 150), whileclient component 154 handles the issuance of requests by device 150 forfiles stored (or to be stored) in the distributed file system. Clientcomponent 154 and server component 152 operate independent of oneanother. Thus, situations can arise where the serverless distributedfile system causes files being stored by client component 154 to bestored in mass storage device 158 by server component 152.

Client component 154 includes a storage and retrieval control module160, a mapping module 162, a decasifying module 164, an encoding module166, an encryption module 168, a decryption module 170, a decodingmodule 172, a recasifying module 174, and a demapping module 176.Control module 160 (in combination with interface 200 discussed below)manages accesses to the serverless distributed file system for thecreation, storage, retrieval, and any other modification of files anddirectories on behalf of computing device 150. Due to the distributednature of the file system, directory information such as file names anddirectory names (plaintext names) are modified by computing device 150prior to being stored in the file system so that the modified namesthemselves reveal very little information about the original plaintextname, while at the same time allowing the device at which the names willbe stored to verify that they are syntactically legal names and are notduplicates. The modified names do leak information about the approximatelength of the original plaintext name (although this leak can be avoidedin an alternate embodiment discussed below). The s modules 162-168 areused to modify plaintext names prior to communicating them to theserverless distributed file system, while modules 170-176 are used toreconstruct the plaintext name when a modified name is received from theserverless distributed file system. The use of these modules and theiroperation will be discussed with additional reference to FIGS. 4-12.

FIG. 4 is a flowchart illustrating an exemplary process for exclusivelyencrypting a directory entry prior to storage in accordance with certainembodiments of the invention. Initially, control module 160 receives aplaintext name that is the directory entry to be encrypted (act 180).The plaintext name is received from another component internal to device150 (not shown), such as an application, operating system, etc. Thereceived plaintext name is made available to mapper 162 which maps theplaintext name to a new mapped name (act 182). The mapped name is thenmade available to decasifier 164 which decasifies the mapped name into adecasified name (e.g., a name where the case of the characters has noimportance) and corresponding case information (act 184).

The decasified name is then made available to encoder 166 which encodesthe decasified name (act 186). The encoded name is then made availableto encryptor 168 which encrypts both the encoded name from act 186 andthe case information from act 184 (act 188). Control module 160 thencommunicates the encrypted name and encrypted case information toanother device for verification and storage (act 190). This encryptedname and case information are also referred to as ciphertexts.

The process of FIG. 4 is based on the directory entries beingcase-insensitive. That is, the serverless distributed file system doesnot distinguish between upper-case and lower-case letters. For example,the entries “MEMO” and “memo” would be the same entries as viewed by theserverless distributed file system. Alternatively, the serverlessdistributed file system may be case-sensitive. If the system iscase-sensitive, then no decasifying is done, and neither decasifier 164nor decasifying act 184 are needed (and act 188 would not encrypt caseinformation).

After the directory entry is modified per the process of FIG. 4, thedirectory entry is communicated to another device via a distributedsystem interface 200. Distributed system interface 200 determines,optionally in collaboration with corresponding interfaces on otherdevices in the serverless distributed file system, where the directoryentry and corresponding file (if any) are to be stored. Interface 200selects one or more devices, which can include computing device 150, andcommunicates the directory entry to the selected device. The selectionprocess can be accomplished in a variety of different manners, such asbased on the storage space available in the various devices that arepart of the serverless distributed file system, an anticipatedlikelihood that one or more of the various devices will be unavailableat any given moment, etc. Interface 200 also maintains a client storagerecord 202 that identifies the location of each directory entry (andcorresponding file, if any) that is stored by client component 154.Thus, when client component 154 requests retrieval of a particulardirectory entry interface 200 knows where to locate the requested entry.

FIG. 5 is a flowchart illustrating an exemplary process for decrypting areceived directory entry in accordance with certain embodiments of theinvention. Initially, control module 160 receives an encrypted name andencrypted case information (ciphertexts) from another device viainterface 200 (act 210). The encrypted name and encrypted caseinformation are made available to decryptor 170 which decrypts both thename and the case information (act 212). The decrypted name is then madeavailable to decoder 172 which decodes the decrypted name (act 214).

The decoded name and decrypted case information are then made availableto recasifier 174 which uses the case information to recasify thedecoded name (act 216). The recasified name is then made available todemapper 176 which demaps the recasified name into the plaintext name(act 218).

The process of FIG. 5 is based on the directory entries beingcase-insensitive. Alternatively, if the serverless distributed filesystem is case-sensitive, then no recasifying is done, and neitherrecasifier 174 nor recasifying act 216 are needed (and no decryption ofcase information is performed in act 212).

An exemplary implementation of the modules 162-176 will now bediscussed.

Mapping module (mapper) 162 maps a received plaintext name into a mappedname. FIG. 6 is a flowchart illustrating an exemplary process formapping the plaintext name to the mapped name in accordance with certainembodiments of the invention. Mapping module 162 initially receives theinput plaintext name (act 240). Mapping module 162 may receive theactual name, or alternatively an indication of where the name can befound (e.g., a pointer to the name).

Mapping module 162 then checks whether the input plaintext name is anillegal name (act 242). Mapping module 162 includes a record of illegalnames, which may be pre-programmed or defined in module 162 oralternatively provided to module 162 by some other component (e.g.,module 160). In one implementation, the following strings (regardless ofcase) are illegal names: CONIN$, CONOUT$, CON, PRN, AUX, NUL, LPTn, COMn(where n represents any digit 0 through 9). Alternatively, the illegalnames may include more or fewer (and/or different) strings.Additionally, the set of illegal names may be the empty set, which isequivalent to there being no illegal names. If there are no illegalnames, then neither mapping module 162 (nor mapping act 242) need beincluded, and demapping module 176 and any demapping acts (discussed inmore detail below) also need not be included.

If the plaintext name is equal to any one of these illegal names then anindication that no valid mapping exists is given to module 160 (act 244)and the modification process of FIG. 4 fails. However, if the inputplaintext name is not an illegal name, then module 162 checks whetherthe input plaintext name is an illegal name followed by one or moreunderscore characters, such as the name “CON_” or “PRN_”, (act 246). Ifthe input name is not an illegal name followed by one or more underscorecharacters, then the input plaintext name is used as the mapped name(act 248). In other words, the input name maps to itself. However, ifthe input name is an illegal name followed by one or more underscorecharacters, then the mapped name is the input name with one trailingunderscore removed (act 250). For example, the input name “CON_” wouldmap to “CON”, and the input name “PRN_” (having two underscores) wouldmap to “PRN_” (having one underscore).

Alternatively, other characters may be used by mapping module 162 otherthan an underscore. Any character (e.g., letter, number, other symbol,etc.) can be used in place of the underscore, so long as adding a stringof zero or more such characters to an illegal name does not result inanother illegal name.

Once mapped, the mapped name is decasified by decasifying module(decasifier) 164. FIG. 7 is a flowchart illustrating an exemplaryprocess for decasifying the mapped name in accordance with certainembodiments of the invention. Decasifying module 164 initially receivesthe input mapped name (act 270). Decasifying module 164 may receive theactual name, or alternatively an indication of where the name can befound (e.g., a pointer to the name), from module 160 or alternativelydirectly from mapping module 162.

Module 164 then initializes two strings, referred to as the L and the Istrings, to null (act 272). At the end of the decasifying process, the Lstring will be the decasified version of the input name received in act270, and the I string will be a set of bits that identify theappropriate case for each of the characters in the L string. Module 164operates to decasify names based on the Unicode standard includingcurrent and future versions of the standard. Additionally informationregarding the Unicode standard is available from The Unicode Consortiumof Mountain View, Calif. The Unicode standard uses sixteen bits toidentify each character, but it is an evolving standard, so not all65,536 combinations are defined. However, the conventional ASCIIcharacter set (which includes the uppercase and lowercase Englishalphabet, numbers, and many symbols commonly used in English) is definedusing the last seven bits of the sixteen Unicode bits (with the firstnine bits being all zeroes). Thus, characters with Unicode valuesbetween 0 and 127 are equivalent to characters with identical ASCIIvalues. Furthermore, characters with Unicode values between 128 and 255have all been defined, and they include characters that, together withthe first 128 Unicode characters, are sufficient to display text in mostLatinate languages. These 256 characters are sometimes referred to asthe “extended ASCII” character set. Due to the evolving nature of theUnicode standard, module 164 is implemented so as to decasify only thosecharacters with Unicode values less than or equal to 255 (that is, theextended ASCII character set). Module 164 does not attempt to decasifyany character in the input mapped name having a Unicode value greaterthan 255. Alternatively, additional characters may be decasified, suchas any characters which are defined in the Unicode standard.

To decasify the received name, module 164 selects the first characterfrom the input name (act 274). Module 164 then checks whether theleading eight bits of the selected character are zero (act 276). If theleading eight bits are not all zero (that is, the character has aUnicode value greater than 255) then module 164 appends the selectedcharacter to the L string and a zero bit to the I string (act 278).Module 164 then checks whether there are any additional characters inthe input name (act 280). If there are no additional characters, thenmodule 164 outputs the decasified name as the L string and thecorresponding case information as the I string (act 282). However, ifthere are additional characters, then module 164 selects the nextcharacter in the input name (act 284) and returns to check whether eachof the leading eight bits of the selected character is zero (act 276).

Returning to act 276, if the leading eight bits of the selectedcharacter are all zeroes, then module 164 checks whether the selectedcharacter is not a lower-case character (act 286). It should be notedthat the phrase “not a lower-case character” is not equivalent to thephrase “an upper-case character”. For example, the asterisk symbol (*)has no case distinction and thus would not be a lower-case character,but also would not be an upper-case character.

If the selected character is not a lower-case character, then theselected character is appended to the L string and a zero bit isappended to the I string (act 288), and the process continues to act 280to check whether any additional characters are in the input name.However, if the selected character is a lower-case character, then theupper-case form of the selected character is appended to the L stringand a one bit is appended to the I string (act 290), and the processcontinues to act 280 to check whether any additional characters are inthe input name.

By way of example, following the process of FIG. 7, if the input namewere “Memo.doc”, then module 164 would output as the decasified name (Lstring) “MEMO.DOC”, and as the case information (I string) “01110111”.

In the illustrated example of FIG. 7, a zero bit in case informationstring I is used to signify that a character is upper-case or has nocase distinction, and the decasified name (L string) is all non-lowercase characters. Various alterations can be made to this process, suchas having upper-case characters signified by a one bit, havingcharacters with no case distinction signified by a one bit, having thedecasified name all non-upper case characters, etc.

Once decasified, the decasified name is encoded by encoding module(encoder) 166. FIG. 8 is a flowchart illustrating an exemplary processfor encoding the decasified name in accordance with certain embodimentsof the invention. Encoding module 166 initially receives the inputdecasified name (act 302). Encoding module 166 may receive the actualname, or alternatively an indication of where the name can be found(e.g., a pointer to the name), from module 160 or alternatively directlyfrom decasifying module 164 (or mapping module 162 if the system iscase-sensitive).

The characters of the input name are then reversed (act 304) and thenumber of trailing underscores in the reversed name counted and removed(act 306). An encoded bit stream B (which will be the output encodedname at the end of the encoding process) is then initialized with astring of one bits equal to the number of underscores removed in act306, followed by a zero (act 308). If there are no trailing underscores,then the encoded bit stream B is initialized with a single zero bit.Alternatively, rather than relying on underscores, different charactersmay be used. In one implementation, the character that is Huffman codedto zero is the character that is counted and removed from the end of thereversed name (Huffman coding is discussed in more detail below).

Module 166 then checks whether the leading eight bits of the firstcharacter in the reversed name are all zero (act 310). If the leadingeight bits are not all zero, then the sixteen bits of the firstcharacter are appended to the encoded bit stream B (act 312). However,if the leading eight bits of the first character are all zero, then thecharacter (based on the last eight bits) is encoded using a first codingtable (act 314), and then eight zero bits followed by the bits from thecoding table are appended to the encoded bit stream B (act 316).

The coding table in act 314 can be generated in any of a wide variety ofconventional manners using any of a wide variety of prefix codingschemes. In one implementation, conventional Huffman coding is used,although other coding schemes could alternatively be used. In theillustrated example, the coding table in act 314 codes an underscore toall zeroes and has codes for all valid non-lower case characters withUnicode values less than 256 and greater than 31, except for thefollowing: space, period, quotation mark, asterisk, forward slash,colon, greater than symbol, less than symbol, question mark, back slash,or vertical line. If module 166 is given an input name with a characterthat is the first character in act 308 and is not in the coding table,then the coding process fails, as does the modification process of FIG.4.

Regardless of the bits added to encoded bit stream B in either act 312or 316, module 166 proceeds to check whether there is an additionalcharacter in the reversed name (act 318). If there are no morecharacters in the reversed name, then module 166 removes any trailingzero bits and the one bit preceding the trailing zero bits from theencoded bit string B (act 320). Module 166 then outputs the encoded bitstring B as the encoded name (act 322).

Returning to act 318, if there are additional characters in the reversedname, then the next character in the reversed name is selected (act 324)and a check made as to whether the leading eight bits of the selectedcharacter are all zero (act 326). If the leading eight bits are not allzero, then the sixteen bits of the selected character are appended tothe encoded bit stream B (act 328). However, if the leading eight bitsof the selected character are all zero, then the character (based on thelast eight bits) is encoded using another coding table (act 330), andthen eight zero bits followed by the bits from the coding table areappended to the encoded bit stream B (act 332).

Analogous to the coding table discussed in act 314 above, the codingtable used in act 330 can be generated in any of a wide variety ofconventional manners using any of a wide variety of prefix codingschemes. In one implementation, conventional Huffman coding is used,although other coding schemes could alternatively be used. In theillustrated example, the coding table in act 330 codes an underscore toall zeroes and has codes for all valid non-lower case characters withUnicode values less than 256 and greater than 31, except for thefollowing: quotation mark, asterisk, forward slash, colon, greater thansymbol, less than symbol, question mark, back slash, or vertical line.These codes may be the same as those in the table of act 314, oralternatively different. If module 166 is given an input name with acharacter that is the selected character in act 324 and is not in thecoding table, then the coding process fails, as does the modificationprocess of FIG. 4.

Regardless of the bits added to encoded bit stream B in either act 328or 332, module 166 proceeds to check whether there is an additionalcharacter in the reversed name (act 318), and proceeds accordingly. Inthe illustrated example of FIG. 8, each additional character is encodedusing the other coding table in act 330. Alternatively, the same codingtable as was used in act 314 may be used in act 330. In anotheralternative, multiple additional coding tables are used in act 330 forencoding additional characters. For example, there may be a differentcoding table for each additional character or groups of characters.

Once encoded, the encoded name (encoded bit string B of FIG. 8) isencrypted by encryption module (encryptor) 168. Encryption module 168initially receives the encoded name (or an indication of where the namecan be found) from module 160 or alternatively directly from encodingmodule 166 (act 302). Encryption module 168 can use any of a widevariety of encryption schemes to encrypt the encoded name. Theencryption scheme used, however, should be surjective so that anyarbitrary string of bits will decrypt to a valid encoded name, and itshould be deterministic so that identicality of names can be determinedby examining only their encrypted forms. In the illustrated example, aconventional block cipher is used, although other types of ciphers couldalternatively be used (e.g., a stream cipher).

Given that the encoded bit string B can be of varying length, additionalbits are added to the bit string B as necessary to bring the bit stringup to a length that is a multiple of the block size for the blockcipher. In one implementation, this addition (also referred to aspadding) to bit string B is accomplished by prepending to the bit stringB (adding to the beginning of the bit string B) a one bit preceded by asmany zero bits as necessary to bring the length of the bit string up toa multiple of the cipher block size. Encryption module 168 then encryptsthe padded bit string B on a per-block (x) basis according to thefollowing three rules:

-   -   (1) if the block x of bit string B has the value of zero, then        the encrypted block has a value of zero;    -   (2) otherwise, if the result of encrypting block x with a block        cipher encryption E is zero, then the encrypted block has a        value equal to the encryption E of the value zero; and    -   (3) if neither rule (1) nor (2) applies, then the encrypted        block has a value equal to the encryption E of the block.

Any of a wide variety of conventional block ciphers can be used as blockcipher encryption E. In one implementation, block cipher encryption E isthe well-known RC2 block cipher. Other conventional block ciphers canalternatively be used, such as DES, RC5, AES/Rijndael, and so forth.

It should also be noted that encryption module 168, using these rules,will not result in an encrypted name with a first block equaling zero.This is true even if the encryption uses a feedback mechanism such ascipher block chaining (CBC) to increase the security of the encrypteddata. In CBC mode, the plaintext of each block is exclusively ORed(XORed) with the ciphertext of the previous block before it isencrypted, thereby making each ciphertext block dependent not only onthe corresponding plaintext block but also on all previous plaintextblocks.

The resulting encrypted blocks are the encrypted name to be communicatedto another device (act 190 of FIG. 4).

In addition to encrypting the name, the case information I is alsoencrypted. The case information I is encrypted using any of a widevariety of conventional block ciphers. The block cipher may be the sameas used for encrypting the encoded name, or alternatively a differentblock cipher. Additionally, the case information may be prepended with aone bit preceded by as many zero bits as necessary to bring the lengthof the case information up to a multiple of the size of the blockcipher, analogous to the padding of the encoded bit string B discussedabove. Alternatively, additional random padding may be added to the endof the case information I to bring it up to a multiple (not necessarilythe next closest multiple) of the block cipher size. Any such additionalinformation is ignored when recasifying the decoded name as discussed inmore detail below.

Once generated, the encrypted directory entry is communicated to one ormore other computing devices 150. As discussed above, this is typicallya different device 150 than the device that generated the encrypteddirectory entry, although it could be the same device. Regardless of thesource of the encrypted directory entry, the distributed systeminterface 200 at the receiving device 150 communicates the directoryentry to server component 152.

Server component 152 includes a distributed system control module 350, asyntax verifier 352, and a duplication identifier 354. Distributedsystem control module 350 receives the encrypted directory entry andcommunicates the entry to syntax verifier 352 to verify that the entryis syntactically legal, and duplication identifier 354 to verify thatthe entry is not a duplicate of another entry in the distributed filesystem. Distributed system control module 350 maintains a record 356 ofthe encrypted directory entries that are stored at computing device 150(or alternatively that are stored in all of the serverless distributedfile system). In addition to having record 356 available in memory 156,if memory 156 is a volatile memory then record 356 is also stored in anonvolatile memory (such as mass storage device 158) in order topreserve record 356 if computing device 150 is powered-down.Additionally, distributed system control module 350 communicates withmass storage device 158 to store and retrieve encrypted filescorresponding to encrypted directory entries in record 356.

Syntax verifier 352 verifies that the syntax of a received directoryentry is valid. In the illustrated example, syntax verifier 352 checkswhether the first block of the encrypted directory entry is zero. If thefirst block is zero, then the directory entry is not syntacticallylegal; otherwise, the directory entry is syntactically legal.

Duplication identifier 354 compares the received encrypted directoryentry to the other encrypted directory entries stored in record 356. Ifthe received encrypted entry matches any of the encrypted entries storedin record 356 in the same folder as the received encrypted entry will beplaced in, then the received entry is a duplicate; otherwise thereceived entry is not a duplicate. Note that the serverless distributedfile system prevents multiple files or folders within the same directoryor folder from having the same name, but does not prevent differentfiles in different folders from having the same name. For example, twofiles in the same directory could not be named “memo.doc”, but two filesin two different directories could be named “memo.doc”. Record 356maintains an indication, for each entry, of which folder or directorythe entry is in.

FIG. 9 is a flowchart illustrating an exemplary process for verifying areceived directory entry in accordance with certain embodiments of theinvention. Initially, the encrypted name is received by distributedsystem control module 350 (act 370). Syntax verifier 352 then checkswhether the first block of the encrypted name is zero (act 372). If thefirst block is zero, then the encrypted name is invalid (act 374).However, if the first block is not zero, then duplication identifier 354checks whether the encrypted name is identical to any other encryptedname in the directory (act 376). If the encrypted name is identical toanother encrypted name in the directory, then the encrypted name isinvalid (act 374); otherwise, the encrypted name is valid (act 380).

As mentioned above, the exclusive encryption described herein maintainsthe following three properties:

-   -   no two encrypted entries in a directory will decrypt to the same        name    -   all encrypted entries in the directory will decrypt to        syntactically legal names    -   the service that maintains the directory does not have access to        the plaintext names of the entries        Distributed system control module 350 ensures that no two        entries in a directory can be duplicates (based on the        comparison performed by duplication identifier 354). Encryption        of the directory entry using the block or other cipher ensures        that the service that maintains the directory does not have        access to the plaintext names of the entries.

The encryption process does not result in an encrypted name having afirst block that equals zero. Thus, any encrypted name having a firstblocker equal to zero is an illegal entry and is detected by syntaxverifier 352. Additionally, in one implementation a directory entry mustsatisfy the following criteria in order to be syntactically legal:

-   -   the directory entry name cannot be null (the encoding process        discussed above with reference to FIG. 8 admits no null name)    -   the directory entry name cannot include any character with an        ASCII or Unicode value less than 32 (the encoding process        discussed above with reference to FIG. 8 admits no such        characters)    -   the directory entry name may not include any of the following        characters: “* / : < > ? \ | (the encoding process discussed        above with reference to FIG. 8 can be configured to admit no        such characters)    -   the final character of a directory entry name may not be a space        or a period (the encoding process discussed above with reference        to FIG. 8 can be configured to admit no such final characters)    -   the following names are illegal (where n is any digit): CONIN$,        CONOUT$, CON, PRN, AUX, NUL, LPTn COMn (the mapping process        discussed above with reference to FIG. 6 can be configured to        admit no such names)    -   for purposes of determining duplication, character case is        ignored (the decasifying process discussed above with reference        to FIG. 7 decasifies the entry names)

Given that the directory entries are stored in an encrypted manner, whena computing device 150 retrieves the entries from another device in theserverless distributed file system, the entries need to be converted toplaintext to be useable by other components in the device. The generalprocess for converting the received encrypted name and case informationinto a plaintext name is discussed above with reference to FIG. 5. Oneimplementation of the process will be described in more detail below.

Initially, the encrypted name (bit string B discussed above) and theencrypted case information are decrypted by decryption module(decryptor) 170. The decryption process is the reverse of the encryptionprocess discussed above. Initially, the prepended encoded name B isdecrypted on a per-block (x) basis according to the following rules:

-   -   (1) if the block x of bit string B has the value of zero, then        the decrypted block has a value of zero;    -   (2) otherwise, if the result of decrypting block x with a block        cipher decryption E⁻1 is zero, then the decrypted block has a        value equal to the decryption E⁻¹ of the value zero; and    -   (3) if neither rule (1) nor (2) applies, then the decrypted        block has a value equal to the decryption E⁻¹ of the block.

The block cipher decryption E⁻¹ is the decryption that corresponds toblock cipher encryption E.

The result of this decryption process is the prepended encoded name B,from which decryption module 170 discards all leading bits up to andincluding the first one bit.

Decryption module 170 decrypts case information analogous to thedecryption of prepended encoded name B. However, if any additionalrandom padding was added to the end of the case information prior toencryption, this additional padding remains part of the decrypted caseinformation and is simply ignored during the recasification processdiscussed below.

Once decrypted, decoding module (decoder) 172 decodes the encoded nameB. FIG. 10 is a flowchart illustrating an exemplary process for decodingan encoded name in accordance with certain embodiments of the invention.Initially, decoding module 172 receives the encoded name (act 400),either from control module 160 or directly from decryption module 170.Decoding module 172 then initializes a name string L to null (act 402).The name string L will be the decoded name output by module 172 uponcompletion of the process of FIG. 10. The encoded name is also extended,if necessary, by appending a one bit followed by as many zero bits asneeded to complete the process described in FIG. 10.

The number of leading one bits that precede the first zero bit in theencoded name B are then counted (act 404) and a pointer initialized topoint to the first bit of the encoded name following the zero bit thatfollows the leading one bit (act 406). Decoding module 172 then checkswhether the leading eight bits pointed to by the pointer are all zeroes(act 408). If the leading eight bits are not all zeroes, then module 172appends the leading sixteen bits pointed to by the pointer to the namestring L (act 410), updates the pointer to point to the first bit afterthe leading sixteen bits (act 412), and proceeds to check whether theleading eight bits pointed to by the pointer are all zeroes (act 414).

Returning to act 408, if the leading eight bits pointed to by thepointer are all zeroes, then module 172 decodes the next eight bitsafter the leading eight bits using a coding table (act 416). The codingtable used in act 416 is the same as the coding table used in act 314 ofFIG. 8. Decoding module 172 then checks whether the decoded character isan underscore (act 418). If the decoded character is an underscore, thenmodule 172 checks whether any more one bits remain in the encoded name B(act 420). If no more one bits remain, then decoding module 172 appendsa string of underscore characters to L equal in number to the number ofleading one bits that preceded the first zero bit as counted in act 404above (act 422). The order of the characters in L is then reversed (act424) and L is output as the decoded name (act 426).

Returning to acts 414 and 418, if the decoded character is not anunderscore (act 418) or more one bits remain in the encoded name (act420), then the decoded character is appended to L (act 428). Decodingmodule 172 then updates the pointer to point to the next bit after thedecoded character (act 430), and then checks whether the leading eightbits pointed to by the pointer are all zeroes (act 414). If the leadingeight bits pointed to by the pointer are not all zeroes, then module 172returns to act 4 10. However, if the leading eight bits pointed to bythe pointer are all zeroes, then module 172 decodes the next eight bitsafter the leading eight bits using another coding table (act 432) andreturns to act 418. The coding table used in act 432 is the same as thecoding table used in act 330 of FIG. 8 above.

Upon completion of the decoding process, a decoded and decasified nameremains, along with corresponding case information. Recasifying module(recasifier) 174 uses the decoded name and the corresponding caseinformation to recasify the name. FIG. 11 is a flowchart illustrating anexemplary recasifying procedure in accordance with certain embodimentsof the invention. Initially, recasifying module 174 receives an inputname and corresponding case information (act 450). The input name and/orcase information can be received from control module 160, oralternatively directly from decoding module 172.

Recasifying module 174 then initializes a decoded name string M to be anull bit string (act 452). Recasifying module 174 outputs string M asthe recasified name upon completing the process of FIG. 11. Recasifyingmodule 174 then selects the first character of the input name and thefirst bit of case information (act 454) and checks whether the selectedcase information bit is zero (act 456).

If the selected case information bit is zero, then the selectedcharacter is appended to string M (act 458). However, if the selectedcase information is not zero, then module 174 checks whether the leadingeight bits of the selected character are all zeroes (act 460). If theleading eight bits of the selected character are not all zero, then theselected character is appended to string M (act 458); otherwise, module174 checks whether the selected character has case distinction (act462). If the selected character does not have case distinction then theselected character is appended to string M (act 458); otherwise, thelower-case form of the selected character is appended to string M (act464).

After acts 458 and 464, module 174 checks whether any additionalcharacters are in the input name (act 466). If there are no morecharacters in the input name then the value of string M is output as therecasified name (act 468). Any bits remaining in the case informationare simply ignored. However, if there are additional characters in theinput name, then module 174 selects the next character in the input name(act 470) and checks whether there is case information corresponding tothe selected character (act 472). If there is case informationcorresponding to the selected character, then the corresponding caseinformation is selected (act 474) and module 174 returns to act 456;otherwise, the value zero is used as the selected case informationcorresponding to the selected character (act 476) and module 174 returnsto act 456.

After recasifying module 174 recasifies the decode name, demappingmodule (demapper) 176 demaps the recasified name. FIG. 12 is a flowchartillustrating an exemplary process for demapping a name in accordancewith certain embodiments of the invention. Initially, an input name isreceived by demapping module 176 (act 500). The input name can bereceived from control module 160, or alternatively directly fromrecasifying module 174 (or alternatively directly from decoding module172 if the serverless distributed file system is case sensitive).

Demapping module 176 then checks whether the input name is equal to anillegal name followed by zero or more underscores (act 502). If theinput name is equal to an illegal name followed by zero or moreunderscores, then the demapped name is formed by appending oneunderscore to the input name (act 504). However, if the input name isnot equal to an illegal name followed by zero or more underscores, thenthe input name is used as the demapped name (act 506). Thus, if theinput name is not equal to an illegal name followed by zero or moreunderscores, then the input name demaps to itself.

The system and process described above with reference to FIGS. 3-12discusses generation and storage of modified names that reveal verylittle information about the original plaintext name (the approximatelength of the original plaintext name and possibly some caseinformation). In an alternate embodiment, the system and processdescribed above are altered so that less information is revealed aboutthe original plaintext name. These alterations are to theencoding/decoding, encryption/decryption, and validation processes asfollows.

The decoding and encoding processes (discussed above with reference toFIGS. 8 and 10) and corresponding modules 166 and 172 of FIG. 3 arealtered so that in act 320 of FIG. 8, only the trailing zero bits (ifany) are removed (the one bit-preceding the trailing zero bits is notremoved). Then, during the decoding process of FIG. 10, the encoded nameis extended by appending as many zero bits as necessary to complete theprocess described in FIG. 10.

Encryption module 168 of FIG. 3 is altered to the following encryptionscheme. A fixed value W is established for the count of blocks in anencrypted name. This imposes some restrictions on the plaintext name (aplaintext name that would result in ciphertext having more than W blockscannot be encrypted using this scheme). The encryption scheme can useany conventional block cipher encryption E (as discussed above) having ablock size of Q bits. Encryption module 168 encrypts the encoded bitstring according to the following three rules:

-   -   (1) if the encoded bit string B equals W×Q zero bits followed by        a single one bit, then remove the trailing one bit from string B        and encrypt the remaining bits of string B with block cipher E;    -   (2) if rule (1) does not apply and if the length of the encoded        bit string B is greater than W×Q, then the procedure is aborted        (the bit string is too long to be encrypted); and    -   (3) if neither rule (1) nor (2) applies, then append as many        zero bits as necessary to the end of encoded bit string B so        that bit string B has a length of W×Q bits, and encrypt the bit        string B with block cipher E.

Encryption module 168 is also altered to encrypt the case information Ias follows. The case information I is extended to include as many bitsas necessary to bring the total length of the case information string Iup to a fixed value V. The value V can vary, and in one implementationis equal to the largest number of characters that can be in a valid name(optionally plus additional space for additional random padding). Thecase information I can be extended using any bit values (e.g., randomvalues). The case information I is then encrypted with block cipher E(or alternatively a different block cipher).

Decryption module 170 is similarly modified so that the decryption isperformed as follows. Decryption module 170 sets the encoded name Bequal to the decryption E⁻¹ of the encrypted name. If the encoded namethus decrypted is all zero bits, then a one bit is appended to encodedname B. The encrypted case information is similarly decrypted using thedecryption corresponding to the block cipher encryption used to encryptthe case information I.

The validation process (discussed above with reference to FIG. 9 andmodules 350 and 352 of FIG. 3) is similarly altered to eliminate thechecking of whether the first block of an encrypted name equals zero(block 372 of FIG. 9). The encryption process described here with afixed block count W can result in valid encrypted names with a firstblock having a value of zero, so this checking is removed from thevalidation process.

The system and process described above with reference to FIGS. 3-12allows multiple properties to be maintained (no two entries in adirectory can be encryptions of identical names, all entries in thedirectory are encryptions of syntactically legal names, and the servicethat maintains the directory does not have access to the plaintext namesof the entries). Alternative systems and processes may also be used thatinvolve fewer acts and/or components, but do not necessarily maintainall of the properties discussed above. One such alternative is to simplyencode a plaintext name using a fixed-bit-width encoding scheme, andthen encrypt the encoded name using an encryption key. This alternative,however, can have problems when used with some encryption ciphers if thenumber of characters that are to be encoded is not a power of two (sothere is no fixed bit width that can exactly encode all legalcharacters). Another such alternative also uses a fixed-bit-widthencoding scheme, but with some characters encoded multiple times. Thisalternative, however, under circumstances cannot ensure that twodirectory entries are not the same.

Another such alternative is to encode each plaintext character usingHuffman coding (or other prefix coding) and then encrypt the encodedname. However, due to variances in lengths of encoded names, it is notalways possible to determine whether an encrypted name represents alegally complete encoded name. Another alternative that solves part ofthis problem is to discard any final partial character during decryptionor to treat all missing bits as zeroes for the final character whenrunning out of characters during decryption. However, both of these canalso result in multiple directory entries that are the same.

FIG. 13 illustrates an example of a suitable operating environment inwhich the invention may be implemented. The illustrated operatingenvironment is only one example of a suitable operating environment andis not intended to suggest any limitation as to the scope of use orfunctionality of the invention. Other well known computing systems,environments, and/or configurations that may be suitable for use withthe invention include, but are not limited to, personal computers,server computers, hand-held or laptop devices, multiprocessor systems,microprocessor-based systems, programmable consumer electronics (e.g.,digital video recorders), gaming consoles, cellular telephones, networkPCs, minicomputers, mainframe computers, distributed computingenvironments that include any of the above systems or devices, and thelike.

FIG. 13 shows a general example of a computer 542 that can be used inaccordance with the invention. Computer 542 is shown as an example of acomputer in which various embodiments of the invention can be practiced,and can be, for example, a computing device 150 of FIG. 3, a computingdevice 120-126 of FIG. 2, a computing device 102 or 104 of FIG. 1, etc.Computer 542 includes one or more processors or processing units 544, asystem memory 546, and a bus 548 that couples various system componentsincluding the system memory 546 to processors 544.

The bus 548 represents one or more of any of several types of busstructures, including a memory bus or memory controller, a peripheralbus, an accelerated graphics port, and a processor or local bus usingany of a variety of bus architectures. The system memory 546 includesread only memory (ROM) 550 and random access memory (RAM) 552. A basicinput/output system (BIOS) 554, containing the basic routines that helpto transfer information between elements within computer 542, such asduring start-up, is stored in ROM 550. Computer 542 further includes ahard disk drive 556 for reading from and writing to a hard disk, notshown, connected to bus 548 via a hard disk drive interface 557 (e.g., aSCSI, ATA, or other type of interface); a magnetic disk drive 558 forreading from and writing to a removable magnetic disk 560, connected tobus 548 via a magnetic disk drive interface 561; and an optical diskdrive 562 for reading from and/or writing to a removable optical disk564 such as a CD ROM, DVD, or other optical media, connected to bus 548via an optical drive interface 565. The drives and their associatedcomputer-readable media provide nonvolatile storage of computer readableinstructions, data structures, program modules and other data forcomputer 542. Although the exemplary environment described hereinemploys a hard disk, a removable magnetic disk 560, and a removableoptical disk 564, it will be appreciated by those skilled in the artthat other types of computer readable media which can store data thatare accessible by a computer, such as magnetic cassettes, flash memorycards, random access memories (RAMs), read only memories (ROM), and thelike, may also be used in the exemplary operating environment.

A number of program modules may be stored on the hard disk, magneticdisk 560, optical disk 564, ROM 550, or RAM 552, including an operatingsystem 570, one or more application programs 572, other program modules574, and program data 576. A user may enter commands and informationinto computer 542 through input devices such as keyboard 578 andpointing device 580. Other input devices (not shown) may include amicrophone, joystick, game pad, satellite dish, scanner, or the like.These and other input devices are connected to the processing unit 544through an interface 568 that is coupled to the system bus (e.g., aserial port interface, a parallel port interface, a universal serial bus(USB) interface, etc.). A monitor 584 or other type of display device isalso connected to the system bus 548 via an interface, such as a videoadapter 586. In addition to the monitor, personal computers typicallyinclude other peripheral output devices (not shown) such as speakers andprinters.

Computer 542 operates in a networked environment using logicalconnections to one or more remote computers, such as a remote computer588. The remote computer 588 may be another personal computer, a server,a router, a network PC, a peer device or other common network node, andtypically includes many or all of the elements described above relativeto computer 542, although only a memory storage device 590 has beenillustrated in FIG. 13. The logical connections depicted in FIG. 13include a local area network (LAN) 592 and a wide area network (WAN)594. Such networking environments are commonplace in offices,enterprise-wide computer networks, intranets, and the Internet. Incertain embodiments of the invention, computer 542 executes an InternetWeb browser program (which may optionally be integrated into theoperating system 570) such as the “Internet Explorer” Web browsermanufactured and distributed by Microsoft Corporation of Redmond, Wash.

When used in a LAN networking environment, computer 542 is connected tothe local network 592 through a network interface or adapter 596. Whenused in a WAN networking environment, computer 542 typically includes amodem 598 or other means for establishing communications over the widearea network 594, such as the Internet. The modem 598, which may beinternal or external, is connected to the system bus 548 via a serialport interface 568. In a networked environment, program modules depictedrelative to the personal computer 542, or portions thereof, may bestored in the remote memory storage device. It will be appreciated thatthe network connections shown are exemplary and other means ofestablishing a communications link between the computers may be used.

Computer 542 also includes a broadcast tuner 600. Broadcast tuner 600receives broadcast signals either directly (e.g., analog or digitalcable transmissions fed directly into tuner 600) or via a receptiondevice (e.g., via antenna or satellite dish).

Computer 542 typically includes at least some form of computer readablemedia. Computer readable media can be any available media that can beaccessed by computer 542. By way of example, and not limitation,computer readable media may comprise computer storage media andcommunication media. Computer storage media includes volatile andnonvolatile, removable and non-removable media implemented in any methodor technology for storage of information such as computer readableinstructions, data structures, program modules, or other data. Computerstorage media includes, but is not limited to, RAM, ROM, EEPROM, flashmemory, or other memory technology; CD-ROM, digital versatile disks(DVD), or other optical storage; magnetic cassettes, magnetic tape,magnetic disk storage, or other magnetic storage devices; or any othermedia which can be used to store the desired information and which canbe accessed by computer 542. Communication media typically embodiescomputer readable instructions, data structures, program modules, orother data in a modulated data signal such as a carrier wave or othertransport mechanism and includes any information delivery media. Theterm “modulated data signal” means a signal that has one or more of itscharacteristics set or changed in such a manner as to encode informationin the signal. By way of example, and not limitation, communicationmedia includes wired media such as wired network or direct-wiredconnection, and wireless media such as acoustic, RF, infrared, and otherwireless media. Combinations of any of the above should also be includedwithin the scope of computer readable media.

The invention has been described in part in the general context ofcomputer-executable instructions, such as program modules, executed byone or more computers or other devices. Generally, program modulesinclude routines, programs, objects, components, data structures, etc.that perform particular tasks or implement particular abstract datatypes. Typically the functionality of the program modules may becombined or distributed as desired in various embodiments.

For purposes of illustration, programs and other executable programcomponents such as the operating system are illustrated herein asdiscrete blocks, although it is recognized that such programs andcomponents reside at various times in different storage components ofthe computer, and are executed by the data processor(s) of the computer.

Alternatively, the invention may be implemented in hardware or acombination of hardware, software, and/or firmware. For example, one ormore application specific integrated circuits (ASICs) could be designedor programmed to carry out the invention.

Conclusion

Although the description above uses language that is specific tostructural features and/or methodological acts, it is to be understoodthat the invention defined in the appended claims is not limited to thespecific features or acts described. Rather, the specific features andacts are disclosed as exemplary forms of implementing the invention.

1. A method comprising: receiving an encrypted identifier; decryptingthe encrypted identifier; decoding the decrypted identifier; anddemapping the decoded decrypted identifier.
 2. A method as recited inclaim 1, further comprising: receiving encrypted case informationcorresponding to the encrypted identifier; decrypting the caseinformation; recasifying, using the decrypted case information and priorto demapping the decoded decrypted identifier, the decrypted identifier;and wherein the demapping comprises demapping the recasified decodeddecrypted identifier.
 3. A method as recited in claim 2, whereinrecasifying the decoded decrypted identifier comprises: for eachcharacter in the decoded decrypted identifier that has both anupper-case and a lower-case form, obtaining the character in upper-caseform from the decoded decrypted identifier, and determining from thecase information whether the character should be included in therecasified decoded decrypted identifier in upper-case form or lower-caseform.
 4. A method as recited in claim 2, wherein the case informationcomprises a set of bits, each bit identifying the appropriate case for acharacter in the decoded decrypted identifier.
 5. A method as recited inclaim 1, wherein decoding the decrypted identifier comprises:initializing a string to null; counting a number of leading one bitsthat precede the first zero bit in the decrypted identifier; and foreach group of sixteen bits following the first zero bit that follows theleading one bits: checking whether a leading eight bits of the group ofsixteen bits are all zero bits; if the leading eight bits are not allzero bits, then appending the group of sixteen bits to the string; ifthe leading eight bits are all zero bits, then generating a decodedcharacter by decoding the next eight bits after the leading eight bitsusing a coding table, and checking whether the decoded character is aparticular character; if the decoded character is not the particularcharacter, then appending the decoded character to the string; and ifthe decoded character is the particular character, then checking whetherany more one bits remain in the encoded identifier, if any more one bitsremain in the encoded identifier then appending the decoded character tothe string, and if no more one bits remain in the encoded identifier,then: appending a series of particular characters to the string, whereinthe series of particular characters includes a number of particularcharacters equal to the number of counted leading one bits; andreversing the order of characters in the string, wherein after thereversing the string comprises the decoded decrypted identifier.
 6. Amethod as recited in claim 5, wherein each of the particular charactersis an underscore.
 7. A method as recited in claim 5, wherein the codingtable comprises a Huffman coding table.
 8. A method as recited in claim5, wherein a first coding table is used for the first group of sixteenbits following the first zero bit that follows the leading one bits, anda second coding table is used for the subsequent groups of sixteen bitsafter the first group of sixteen bits.
 9. A method as recited in claim8, wherein each coding in the first coding table is the same as acorresponding coding in the second coding table, but the second codingtable codes additional characters not coded by the first coding table.10. A method as recited in claim 1, wherein demapping the decodeddecrypted identifier comprises: checking whether the decoded decryptedidentifier is equal to one of a plurality of illegal identifiersfollowed by one or more particular characters; if the decoded decryptedidentifier is not equal to one of the plurality of illegal identifiersfollowed by the one or more particular characters, then using thedecoded decrypted identifier as the demapped identifier; and if thedecoded decrypted identifier is equal to one of the plurality of illegalidentifiers followed by the one or more particular characters, thenusing as the demapped identifier the decoded decrypted identifier withone of the particular characters appended to the decoded decryptedidentifier.
 11. A method as recited in claim 10, wherein each of the oneor more particular characters comprises an underscore.
 12. A method asrecited in claim 1, wherein decrypting the encrypted identifiercomprises using a block cipher to decrypt the encrypted identifier. 13.A method as recited in claim 1, wherein decrypting the encryptedidentifier comprises using cipher block chaining to decrypt theencrypted identifier.
 14. A method as recited in claim 1, wherein theidentifier comprises one of: a file name, a folder name, and a directoryname.
 15. One or more computer readable media having stored thereon aplurality of instructions that, when executed by one or more processors,causes the one or more processors to perform acts including: receivingan encrypted directory entry; decrypting the encrypted directory entry;decoding the decrypted directory entry; and demapping the decodeddecrypted directory entry.
 16. One or more computer readable media asrecited in claim 15, the acts further comprising: receiving encryptedcase information corresponding to the encrypted directory entry;decrypting the case information; recasifying, using the decrypted caseinformation and prior to demapping the decoded decrypted directoryentry, the decrypted directory entry; and wherein the demappingcomprises demapping the recasified decoded decrypted directory entry.17. One or more computer readable media as recited in claim 16, whereinthe case information comprises a set of bits, each bit identifying theappropriate case for a character in the decoded decrypted directoryentry.
 18. One or more computer readable media as recited in claim 15,wherein decoding the decrypted directory entry comprises: initializing astring to null; counting a number of leading one bits that precede thefirst zero bit in the decrypted directory entry; and for each group ofsixteen bits following the first zero bit that follows the leading onebits: checking whether a leading eight bits of the group of sixteen bitsare all zero bits; if the leading eight bits are not all zero bits, thenappending the group of sixteen bits to the string; if the leading eightbits are all zero bits, then generating a decoded character by decodingthe next eight bits after the leading eight bits using a coding table,and checking whether the decoded character is a particular character; ifthe decoded character is not the particular character, then appendingthe decoded character to the string; and if the decoded character is theparticular character, then checking whether any more one bits remain inthe encoded directory entry, if any more one bits remain in the encodeddirectory entry then appending the decoded character to the string, andif no more one bits remain in the encoded directory entry, then:appending a series of particular characters to the string, wherein theseries of particular characters includes a number of particularcharacters equal to the number of counted leading one bits; andreversing the order of characters in the string, wherein after thereversing the string comprises the decoded decrypted directory entry.19. One or more computer readable media as recited in claim 18, whereineach of the particular characters is an underscore.
 20. One or morecomputer readable media as recited in claim 15, wherein demapping thedecoded decrypted directory entry comprises: checking whether thedecoded decrypted directory entry is equal to one of a plurality ofillegal directory entries followed by one or more particular characters;if the directory entry is not equal to one of the plurality of illegaldirectory entries followed by the one or more particular characters,then using the decoded decrypted directory entry as the demappedidentifier; and if the directory entry is equal to one of the pluralityof illegal directory entries followed by the one or more particularcharacters, then using as the demapped directory entry the decodeddecrypted directory entry with one of the particular characters appendedto the decoded decrypted directory entry.
 21. One or more computerreadable media as recited in claim 15, wherein decrypting the encrypteddirectory entry comprises using a block cipher to decrypt the encrypteddirectory entry.
 22. One or more computer readable media as recited inclaim 15, wherein decrypting the encrypted directory entry comprisesusing cipher block chaining to decrypt the encrypted directory entry.23. One or more computer readable media as recited in claim 15, whereinthe directory entry comprises one of: a file name, a folder name, and adirectory entry.
 24. A system comprising: means for receiving anencrypted identifier; means for decrypting the encrypted identifier;means for decoding the decrypted identifier; and means for demapping thedecoded decrypted identifier.
 25. A system as recited in claim 24,further comprising: means for receiving encrypted case informationcorresponding to the encrypted identifier; means for decrypting the caseinformation; means for recasifying, using the decrypted case informationand prior to demapping the decoded decrypted identifier, the decryptedidentifier; and wherein the means for demapping comprises means fordemapping the recasified decoded decrypted identifier.
 26. A system asrecited in claim 25, wherein the case information comprises a set ofbits, each bit identifying the appropriate case for a character in thedecoded decrypted identifier.
 27. A system as recited in claim 24,wherein the means for decoding the decrypted identifier comprises: meansfor initializing a string to null; means for counting a number ofleading one bits that precede the first zero bit in the decryptedidentifier; and means for, for each group of sixteen bits following thefirst zero bit that follows the leading one bits: checking whether aleading eight bits of the group of sixteen bits are all zero bits; ifthe leading eight bits are not all zero bits, then appending the groupof sixteen bits to the string; if the leading eight bits are all zerobits, then generating a decoded character by decoding the next eightbits after the leading eight bits using a coding table, and checkingwhether the decoded character is a particular character; if the decodedcharacter is not the particular character, then appending the decodedcharacter to the string; and if the decoded character is the particularcharacter, then checking whether any more one bits remain in the encodedidentifier, if any more one bits remain in the encoded identifier thenappending the decoded character to the string, and if no more one bitsremain in the encoded identifier, then: appending a series of particularcharacters to the string, wherein the series of particular charactersincludes a number of particular characters equal to the number ofcounted leading one bits; and reversing the order of characters in thestring, wherein after the reversing the string comprises the decodeddecrypted identifier.
 28. A system as recited in claim 27, wherein eachof the particular characters is an underscore.
 29. A system as recitedin claim 24, wherein the means for demapping the decoded decryptedidentifier comprises: means for checking whether the decoded decryptedidentifier is equal to one of a plurality of illegal identifiersfollowed by one or more particular characters; means for, if the decodeddecrypted identifier is not equal to one of the plurality of illegalidentifiers followed by the one or more particular characters, using thedecoded decrypted identifier as the demapped identifier; and means for,if the decoded decrypted identifier is equal to one of the plurality ofillegal identifiers followed by the one or more particular characters,using as the demapped identifier the decoded decrypted identifier withone of the particular characters appended to the decoded decryptedidentifier.
 30. A system as recited in claim 24, wherein the means fordecrypting the encrypted identifier comprises means for using a blockcipher to decrypt the encrypted identifier.
 31. A system as recited inclaim 24, wherein the means for decrypting the encrypted identifiercomprises means for using cipher block chaining to decrypt the encryptedidentifier.
 32. A system as recited in claim 24, wherein the identifiercomprises one of: a file name, a folder name, and a directory name. 33.A system comprising: an interface to receive an encrypted identifier; adecryption module, coupled to the interface, to decrypt the encryptedidentifier; a decoding module, coupled to the decryption module, todecode the decrypted identifier; and a demapping module, coupled to thedecoding module, to demap the decoded decryted identifier.
 34. A systemas recited in claim 33, wherein the interface is further to receiveencrypted case information corresponding to the encrypted identifier,wherein the decryption module is further to decrypt the caseinformation, and further comprising: a recasifying module to recasify,using the decrypted case information, the decrypted identifier; andwherein the demapping module is to demap the recasified decodeddecrypted identifier.
 35. A system as recited in claim 33, wherein thedecoding module is to decode the decrypted identifier by: initializing astring to null; counting a number of leading one bits that precede thefirst zero bit in the decrypted identifier; and for each group ofsixteen bits following the first zero bit that follows the leading onebits: checking whether a leading eight bits of the group of sixteen bitsare all zero bits; if the leading eight bits are not all zero bits, thenappending the group of sixteen bits to the string; if the leading eightbits are all zero bits, then generating a decoded character by decodingthe next eight bits after the leading eight bits using a coding table,and checking whether the decoded character is a particular character; ifthe decoded character is not the particular character, then appendingthe decoded character to the string; and if the decoded character is theparticular character, then checking whether any more one bits remain inthe encoded identifier, if any more one bits remain in the encodedidentifier then appending the decoded character to the string, and if nomore one bits remain in the encoded identifier, then: appending a seriesof particular characters to the string, wherein the series of particularcharacters includes a number of particular characters equal to thenumber of counted leading one bits; and reversing the order ofcharacters in the string, wherein after the reversing the stringcomprises the decoded decrypted identifier.
 36. A system as recited inclaim 33, wherein the demapping module is to demap the decoded decryptedidentifier by: checking whether the decoded decrypted identifier isequal to one of a plurality of illegal identifiers followed by one ormore particular characters; if the decoded decrypted identifier is notequal to one of the plurality of illegal identifiers followed by the oneor more particular characters, then using the decoded decryptedidentifier as the demapped identifier; and if the decoded decryptedidentifier is equal to one of the plurality of illegal identifiersfollowed by the one or more particular characters, then using as thedemapped identifier the decoded decrypted identifier with one of theparticular characters appended to the decoded decrypted identifier. 37.A system as recited in claim 33, wherein the identifier comprises oneof: a file name, a folder name, and a directory name.